/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.graficaluna.dao.pedido;

import com.graficaluna.dao.otros.MyBatisConnectionFactory;
import dto.DetallePedidoDTO;
import dto.PedidoDTO;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

/**
 *
 * @author rsaldana
 */
public class PedidoDAO {

    private SqlSessionFactory sqlSessionFactory;

    public PedidoDAO() {
        sqlSessionFactory = MyBatisConnectionFactory.getSqlSessionFactory();
    }

    public List<PedidoDTO> listarPedidos(PedidoDTO pedido) throws Exception {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            List<PedidoDTO> list = session.selectList("pedidoSQL.listarPedidoPorCliente", pedido);
            return list;
        } catch (Exception e) {
            throw new Exception(e.getMessage());
        } finally {
            session.close();
        }
    }

    public PedidoDTO obtenerPedidos(PedidoDTO pedido) throws Exception {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            PedidoDTO p = session.selectOne("pedidoSQL.obtenerPedidoPorId", pedido);
            List<DetallePedidoDTO> l = session.selectList("pedidoSQL.listarDetallePedido", p);

            p.setLstDetallePedido(new ArrayList<DetallePedidoDTO>(l));
            return p;
        } catch (Exception e) {
            throw new Exception(e.getMessage());
        } finally {
            session.close();
        }
    }

    public List<PedidoDTO> obtenerPedidos(String multipleId) throws Exception {
        SqlSession session = sqlSessionFactory.openSession();
        String[] ids = multipleId.split(",");
        List<PedidoDTO> list = new ArrayList<PedidoDTO>();
        try {
            PedidoDTO pedido;
            for (String id : ids) {
                pedido = new PedidoDTO();
                pedido.setNumPedido(new Long(id));
                pedido = session.selectOne("pedidoSQL.obtenerPedidoPorId", pedido);
                List<DetallePedidoDTO> l = session.selectList("pedidoSQL.listarDetallePedido", pedido);
                if (l != null) {
                    pedido.setLstDetallePedido(new ArrayList<DetallePedidoDTO>(l));
                } else {
                    pedido.setLstDetallePedido(new ArrayList<DetallePedidoDTO>());
                }
                list.add(pedido);
            }

            return list;
        } catch (Exception e) {
            throw new Exception(e.getMessage());
        } finally {
            session.close();
        }
    }

    public void actualizarEstado(PedidoDTO pedido) throws Exception {
        SqlSession session = sqlSessionFactory.openSession(false);
        try {
            session.update("pedidoSQL.actualizarEstado", pedido);
            session.commit();
        } catch (Exception e) {
            throw new Exception(e.getMessage());
        } finally {
            session.close();
        }
    }
    
    public void actualizarArchivo(DetallePedidoDTO pedido) throws Exception{
         SqlSession session = sqlSessionFactory.openSession(false);
        try {
            session.update("pedidoSQL.actualizarArchivo", pedido);
            session.commit();
        } catch (Exception e) {
            throw new Exception(e.getMessage());
        } finally {
            session.close();
        }
    }
}
